﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace Tony.SQLServer
{
	/// <summary>
	/// 用ADO.Net对SQL Server数据库操作函数的封装
	/// </summary>
	public class DBOperation : BaseClass
	{
		#region 构造函数
		/**********************************************************************************************
		 ** 函数名：	DBOperating
		 ** 功能描述：	类构造函数，初始化数据库连接对象
		 ** 输入参数：
		 ** 输出参数：
		 ** 返回值：	SqlConnection		数据库连接对象
		 ** 作者：	Tony Mucor
		 ** 日期：	2013-07-08
		 *********************************************************************************************/
		public DBOperation()
		{

		}
		#endregion

		#region 实现方法

		#region 获得数据库链接对象
		/// <summary>
		/// 获得数据库链接对象
		/// </summary>
		/**********************************************************************************************
		 ** 功能描述：	获得数据库链接对象
		 ** 输入参数：
		 ** 返回值：
		 ** 作者：	Tony Mucor
		 ** 日期：	2013-08-20 16:15
		 ** 修改：
		 ** 日期：
		 *********************************************************************************************/
		private SqlConnection GetConnection()
		{
			SqlConnection lconn;
			//lconn.ConnectionString = "server=localhost;database=Template;uid=sa;pwd='sa'";
			lconn = new SqlConnection();
			try
			{
				//lconn.ConnectionString = ConfigurationManager.AppSettings["ConnString"].ToString();
				
				//lconn.ConnectionString = "server=172.16.8.31;database=PX;uid=px;pwd='px'";
				lconn.ConnectionString = "server=(local);database=PXExpert;uid=sa;pwd='sa123!'";
			}
			catch (Exception ex)
			{
				//ShowMessageAlert.ShowMessage(ex.Message);
				//ShowMessageAlert.ShowMessage("请检查数据库链接！");
				AddError(ex.Message);
				lconn = null;
			}
			finally
			{
				
			}

			return lconn;
		}
		#endregion

		#region 执行一个SQL语句，并返回受影响的行数
		/// <summary>
		/// 执行一个SQL语句，并返回受影响的行数
		/// </summary>
		/**********************************************************************************************
		 ** 功能描述：	执行一个SQL语句，并返回受影响的行数，多用在添加、修改、删除功能
		 ** 输入参数：
		 ** 返回值：	int 受影响的行数，如果没有则为0
		 ** 作者：	Tony Mucor
		 ** 日期：	2013-08-20 16:13
		 ** 修改：
		 ** 日期：
		 *********************************************************************************************/
		public int ExecuteSQL(string strSQL)
		{
			SqlConnection conn = new SqlConnection();
			int n = 0;

			try
			{
				conn = GetConnection();
				conn.Open();

				SqlCommand cmd = new SqlCommand(strSQL, conn);
				n = cmd.ExecuteNonQuery();
			}
			catch (Exception ex)
			{
				AddError(ex.Message);
			}
			finally
			{
				if (conn != null)
				{
					conn.Dispose();
				}

			}
			return n;
		}
		#endregion

		#region 根据查询条件查询，返回DataTable
		/// <summary>
		/// 根据查询条件查询，返回DataTable
		/// </summary>
		/**********************************************************************************************
		 ** 功能描述：	根据查询条件查询，返回DataTable
		 ** 输入参数：
		 ** 返回值：
		 ** 作者：	Tony Mucor
		 ** 日期：	2013-08-20 16:17
		 ** 修改：
		 ** 日期：
		 *********************************************************************************************/
		public DataTable QueryDataTable(string strSQL)
		{
			SqlConnection conn = new SqlConnection();
			DataSet ds = new DataSet();

			try
			{
				conn = GetConnection();
				conn.Open();
				SqlCommand cmd = new SqlCommand(strSQL, conn);
				SqlDataAdapter da = new SqlDataAdapter(cmd);
				da.Fill(ds);
			}
			catch (SqlException ex)
			{
				AddError(ex.Message);
			}
			finally
			{
				if (conn != null)
				{
					conn.Close();
				}
			}

			if (ds.Tables.Count > 0)
			{
				return ds.Tables[0];
			}
			else
			{
				return null;
			}
		}
		#endregion

		#endregion
	}
}